Effective Java 2nd Edition: 9-11章
第9章 例外
項目61: 抽象概念に適した例外をスローする
会の処理からスローされた例外を、catch 下レイヤの抽象レベルに合わせた例外に翻訳する
デバッグ用に chain する
例外翻訳は便利だが乱用するべきではない
会レベルのメソッドが成功することを保証するような実装をする
上位レベルで記録するなどにとどめて処理を続行させる
項目62: 文書化
非チェック例外を @throws に書くのはだめ
項目64: エラーアトミック性に努める
第10章 並行性
項目66: 共有された可変データへのアクセスを同期する
synchronized
同期?
あるオブジェクトが他のスレッドによって変更を受けている間に不整合な状態として参照できてしまうことを防ぐための相互排他の手段
同期されたメソッド・ブロックに入ったスレッドが同じロックで保護されていた以前の全変更の結果を見られることの保証
信頼性のある通信にとって重要
メモリモデル
1つのスレッドによる変更が他のスレッドにいつどのように見えるかを定義
volatile
可変データを共有しないのが最善
事実上不変 (effectively immutable)
項目67: 過剰な同期は避ける
同期処理を行う領域を最小限にする
Override 前提のメソッドや引数として受け取る関数オブジェクトなどを同期処理を行う箇所で実行しない
クライアント定義の処理では制御ができないので...
項目68: スレッドより executor と task
java.util.concurrent.ExecutorService
第11章 シリアライズ
項目74: Serializable を注意して実装する
一旦リリースされるとクラスの実装を変更する柔軟性を低下させる
カスタムシリアライズ形式を用いる
項目75: カスタムシリアライズ形式の使用を検討する